package StringSecond.SwordOffer;

import java.util.Arrays;

public class CheckInclusion {
    /**
     * 剑指 Offer II 014. 字符串中的变位词
     * 给定两个字符串 s1 和 s2，写一个函数来判断 s2 是否包含 s1 的某个变位词。
     * <p>
     * 换句话说，第一个字符串的排列之一是第二个字符串的 子串 。
     * <p>
     * <p>
     * <p>
     * 示例 1：
     * <p>
     * 输入: s1 = "ab" s2 = "eidbaooo"
     * 输出: True
     * 解释: s2 包含 s1 的排列之一 ("ba").
     * 示例 2：
     * <p>
     * 输入: s1= "ab" s2 = "eidboaoo"
     * 输出: False
     */

    public static boolean checkInclusion(String s1, String s2) {
        int m = s1.length();
        int n = s2.length();
        if (m > n) {
            return false;
        }
        int[] current1 = new int[26];
        int[] current2 = new int[26];
        for (int i = 0; i < m; i++) {
            current1[s1.charAt(i) - 'a']++;
            current2[s2.charAt(i) - 'a']++;
        }
        if(Arrays.equals(current1,current2)){
            return true;
        }
        for (int i = 0; i < n - m; i++) {
            current2[s2.charAt(i) - 'a']--;
            current2[s2.charAt(i + m) - 'a']++;
            if(Arrays.equals(current1,current2)){
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(checkInclusion("oo", "eidbaooo"));
    }
}
